package com.tecode.day02.java;
/**
 * 
 * 如果给对象的属性赋值时，直接把值赋值给属性，会出现什么问题？
 * 		出现的问题是，如果赋的值是不合法的无法判断。
 * 		解决办法：
 * 				1）。让外部不能看见该属性。把属性私有化  private。
 * 				2）。不让值直接赋值给属性，而是通过方法来给一个属性赋值。
 *
 *
 *
 *	类的成员之三：构造器(特殊的方法)
 *		构造器：在java中构造器的作用就是用于构建一个类的对象的。
 *
 *		构造器的语法：
 *
 *
 *		权限修饰符       类名称(形参列表){
 *			//构造器体；
 *
 *		}
 *
 *	注意点：
 *			
 *		1.构造器的名称必须和当前类的名称完全相同。
 *		2.构造器没有返回值和void
 *		3.构造不能被static、final、synchronized、abstract、native修饰，不能有return语句返回值
 *		4.每个类都默认都有一个隐含的空参构造器。
 *		5.如果在类中显示的定义了构造器，那么默认值的空参构造器则被覆盖了（不存在了），如果需要空参构造器，则显示的定义。
 *		6.一个类中可以定义多个构造器，多个构造器构成重载。（方法的重载）
 *		7.构造器重载的条件
 *				1）.同一个类中
 *				2）参数列表不同(参数的个数不同，参数的类型不同)
		8.通过构造器可以传入参数。那么我们可以在定义对象时，就给对象的属性赋值。
					public Person(int a){
							age =a ;
					}
					Person person = new Person("abc",10,21);
				
					public Person(String name1,int id1,int age1){
							name = name1;
							id = id1;
							age = age1;
					}
		9.建议每一个类都定义一个空参的构造器。
		
	this 关键字：
			this：这里  这个。
			
			它在方法内部使用，即这个方法所属对象的引用；
					  如果在方法内部使用this,this表示的是调用当前方法的对象。
					 在方法中的用法：this.属性   或   this.方法名()
					 
					 this.getAge();
					 this.age =age;
			它在构造器内部使用，表示该构造器正在初始化的对象。
					在构造器中右两种用法：
					this.属性   或   this.方法名()
					
					this(形参列表); //表示调用当前类的其他构造器。
					
					
		注意：
				1.当形参的名称和成员变量的名称相同时，如果不指定this关键字，则表示使用的是形参的参数。
				2.在构造其中使用 this(形参列表);时，必须放在构造器的第一行。
				3.在多个构造器中使用this(形参列表)进行构造器调用时，在类必须有一个构造器中没有this(形参列表)的语句。
						构造器相互调用之间不要形成死循环。


		
 */

public class TestPerson {
	
	public static void main(String[] args) {
		
		Person person = new Person("abc",10,21);
		
/*		//给定义的person对象的属性赋值
		
		person.id  = 1000;
		person.name="张三";
		//person.age = 111130;
		person.setAge(100000); //调用给age属性赋值的方法。进行给age属性赋值。
		
		
		person.sleep();
		
		System.out.println(person.getAge());*/
		
		System.out.println(person.getAge());
		
	}

}
